package com.neutech.solar.entity;



import com.neutech.solar.contant.Constant;

import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class AbstractFrame extends Frame {
    /*
     * 自定义初始化窗口的方法
     * */
    private String title;
    public void  init(String title) {
        //大小
        this.setSize(Constant.WINDOW_WIDTH,Constant.WINDOW_HEIGHT);
        //位置
        this.setLocation(0,0);
        //设置窗口可见性
        this.setVisible(true);
        //添加关闭窗口的方法
        //匿名内部类
        //在参数序列中，有接口或者抽象类为参数时，并且实现接口的方法只用一次
        this.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
        //设置题目
        this.setTitle(title);
        //设置窗口不可改变
        //this.setResizable(false);
        //设置窗口在中间显示
        //this.setLocationRelativeTo(null);
        //启动多线程
        new MyThread().start();
    }
        //添加多线程的成员内部类
    class MyThread extends Thread{
        //java中实现多线程，进行重新绘制窗口
            @Override
            public void run() {
                for(;;){
                    repaint();//自动调用paint();
                    //当前线程间隔时间
                    //异常处理
                    try {
                        Thread.sleep(40);//40ms刷新一次
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }

                }
            }
        }
    // 解决图片闪烁的问题，用双缓冲方法解决闪烁问题
    Image backImg = null;

    // 重写update()方法，在窗口的里层添加一个虚拟的图片
    @Override
    public void update(Graphics g) {
        if (backImg == null) {
            // 如果虚拟图片不存在，创建一个和窗口一样大小的图片
            backImg = createImage(Constant.WINDOW_WIDTH, Constant.WINDOW_HEIGHT);
        }
        // 获取到虚拟图片的画笔
        Graphics backg = backImg.getGraphics();
        Color c = backg.getColor();
        backg.setColor(Color.black);
        backg.fillRect(0, 0, Constant.WINDOW_WIDTH, Constant.WINDOW_HEIGHT);
        backg.setColor(c);
        // 调用虚拟图片的paint()方法，每50ms刷新一次
        paint(backg);
        g.drawImage(backImg, 0, 0, null);
    }
}
